package org.amicofragile.zoo;

import java.util.Collection;
import java.util.LinkedList;

public class Zoo {
	public static void main(String[] args) {
		Collection<Mammifero> mammiferi = new LinkedList<Mammifero>();

		mammiferi.add(new Cetaceo());
		mammiferi.add(new Felino());
		mammiferi.add(new Umano());
		mammiferi.add(new Felino());
		mammiferi.add(new Pipistrello());
		mammiferi.add(new Pilota());

		stampaListaMovimenti(mammiferi);
		System.out.println("----------------");
		stampaListaMovimentiConIfDiTipo(mammiferi);
	}

	private static void stampaListaMovimentiConIfDiTipo(Collection<Mammifero> mammiferi) {
		for (Mammifero mammifero : mammiferi) {
			muoviConIfDiTipo(mammifero);
		}
	}
	/**
	 * Brutto brutto brutto!
	 * @param mammifero
	 */
	private static void muoviConIfDiTipo(Mammifero mammifero) {
		if (mammifero instanceof Felino) {
			Felino felino = (Felino) mammifero;
			felino.corri();
		} else if (mammifero instanceof Cetaceo) {
			((Cetaceo) mammifero).nuota();
		} else if (mammifero instanceof Umano) {
			if (mammifero instanceof Pilota) {
				((Pilota) mammifero).vola();
			} else {
				((Umano) mammifero).guida();
			}
		}
	}

	private static void stampaListaMovimenti(Collection<Mammifero> mammiferi) {
		for (Mammifero mammifero : mammiferi) {
			muovi(mammifero);
		}
	}

	private static void muovi(Mammifero mammifero) {
		mammifero.muovi();
	}
}
